2.3: Aktivitas dan Maksud Implisit
Materi:
- Pengantar
- Tentang maksud implisit
- Mengirim maksud implisit
- Menerima maksud implisit
- Berbagi data dengan ShareCompat.IntentBuilder
- Mengelola tugas dan aktivitas
- Mode Peluncuran Aktivitas
- Afinitas Tugas
- Praktik Terkait
- Ketahui Selengkapnya
Di bab sebelumnya, Anda telah mempelajari tentang maksud, dan cara meluncurkan aktivitas khusus di aplikasi dengan maksud eksplisit. Di bab ini, Anda akan mempelajari cara mengirim dan menerima maksud implisit, tempat mendeklarasikan aksi umum yang dilakukan dalam maksud, dan sistem akan mencocokkan permintaan dengan aktivitas khusus. Selain itu, Anda akan mengetahui selengkapnya tentang tugas Android, dan cara mengonfigurasi aplikasi untuk mengaitkan aktivitas baru dengan tugas berbeda.
Tentang maksud implisit
Di bab awal, Anda telah mempelajari tentang maksud eksplisit, tempat Anda bisa memulai satu aktivitas dari aktivitas lain dengan menetapkan nama kelas aktivitas itu. Inilah cara paling dasar untuk menggunakan maksud, untuk memulai aktivitas atau komponen aplikasi lainnya dan meneruskan data ke maksud (dan kadang-kadang meneruskan data kembali).
Penggunaan maksud yang lebih fleksibel adalah maksud implisit. Dengan maksud implisit, Anda tidak menetapkan aktivitas yang tepat (atau komponen lainnya) untuk dijalankan—sebagai gantinya, Anda menyertakan informasi secukupnya dalam maksud tentang tugas yang ingin dilakukan. Sistem Android akan mencocokkan informasi dalam maksud permintaan dengan aktivitas yang tersedia di perangkat yang bisa melakukan tugas itu. Jika hanya ada satu aktivitas yang cocok, aktivitas itu akan diluncurkan. Jika ada beberapa aktivitas yang cocok, pengguna disediakan pemilih aplikasi yang memungkinkan mereka memilih aplikasi yang disukai untuk melakukan tugas.
Misalnya, Anda memiliki aplikasi yang mencantumkan cuplikan video yang tersedia. Jika pengguna menyentuh item dalam daftar, Anda akan memutar cuplikan video itu. Daripada mengimplementasikan keseluruhan pemutar video di aplikasi, Anda bisa meluncurkan maksud yang menetapkan tugas seperti "putar objek video tipe." Sistem Android selanjutnya akan mencocokkan permintaan dengan aktivitas yang telah mendaftarkan dirinya sendiri untuk memutar objek video tipe.
Aktivitas mendaftarkan dirinya sendiri secara otomatis pada sistem agar dapat menangani maksud implisit dengan filter maksud, yang dideklarasikan dalam manifes Android. Misalnya, aktivitas utama (dan satu-satunya aktivitas utama) untuk aplikasi Anda memiliki filter maksud yang mendeklarasikan aktivitas utama untuk kategori peluncur. Filter maksud ini adalah cara sistem Android mengetahui cara memulai aktivitas tertentu di aplikasi Anda bila pengguna mengetuk ikon untuk aplikasi di layar utama perangkat.
Aksi maksud, kategori, dan data
Maksud implisit, seperti maksud eksplisit, merupakan instance kelas Intent. Selain bagian maksud yang telah Anda pelajari di bab awal (seperti data maksud dan ekstra maksud), bidang-bidang ini digunakan oleh maksud implisit:
- Aksi maksud, merupakan aksi umum yang harus dilakukan aktivitas penerima. Aksi maksud yang tersedia didefinisikan sebagai konstanta dalam kelas Intent dan dimulai dengan kata ACTION_. Aksi maksud umum adalah ACTION_VIEW, yang Anda gunakan bila memiliki beberapa informasi yang bisa ditampilkan aktivitas kepada pengguna, seperti foto untuk ditampilkan di aplikasi galeri, atau alamat untuk ditampilkan di aplikasi peta. Anda bisa menetapkan aksi untuk sebuah maksud di konstruktor maksud, atau dengan metode setAction().
- Kategori maksud, menyediakan informasi tambahan tentang kategori komponen yang harus menangani maksud. Kategori maksud bersifat opsional, dan Anda bisa menambahkan lebih dari satu kategori ke maksud. Kategori maksud juga didefinisikan sebagai konstanta di kelas Intent dan dimulai dengan kata CATEGORY_. Anda bisa menambahkan kategori ke maksud dengan metode addCategory().
- Tipe data, yang menunjukkan MIME tipe data yang digunakan untuk mengoperasikan aktivitas. Biasanya, ini diambil dari URI dalam bidang data maksud, namun Anda juga bisa secara eksplisit mendefinisikan tipe data dengan metode setType().
Tindakan, kategori, dan tipe data maksud keduanya digunakan oleh objek Maksud yang Anda buat di aktivitas pengiriman, serta di filter maksud yang didefinisikan di manifes Android untuk aktivitas penerimaan. Sistem Android menggunakan informasi ini untuk mencocokkan permintaan maksud implisit dengan aktivitas atau komponen lain yang bisa menangani maksud itu.
Mengirim maksud implisit
Memulai aktivitas bersama maksud implisit, dan meneruskan data di antara aktivitas itu, cara kerjanya sangat mirip dengan yang dilakukan untuk maksud eksplisit:
- Di aktivitas pengirim, buat objek Maksud baru.
- Tambahkan informasi tentang permintaan ke objek Intent, seperti data atau ekstra.
- Kirim maksud bersama startActivity() (untuk memulai aktivitas saja) atau startActivityforResult() (untuk memulai aktivitas dan mengharapkan hasil kembali).
Bila membuat objek Intent implisit, Anda:
- Jangan menetapkan aktivitas khusus atau komponen lain untuk diluncurkan.
- Menambahkan aksi maksud atau kategori maksud (atau keduanya).
- Cocokkan maksud dengan sistem sebelum memanggil startActivity() atau startActivityforResult().
- Menampilkan pemilih aplikasi untuk permintaan (opsional).
Buat objek Intent implisit
Untuk menggunakan maksud implisit, buat objek Intent seperti yang dilakukan untuk maksud eksplisit, hanya tanpa nama komponen spesifik.
Intent sendIntent = new Intent();
Anda juga bisa membuat objek Intent dengan aksi tertentu:
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
Setelah memiliki objek Intent, Anda bisa menambahkan informasi lain (kategori, data, ekstra) dengan beragam metode Intent. Misalnya, kode ini membuat objek Intent implisit, menyetel aksi maksud ke ACTION_SEND, mendefinisikan ekstra maksud untuk menampung teks, dan menyetel tipe data ke tipe MIME "text/plain".
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
sendIntent.setType("text/plain");
Cocokkan aktivitas sebelumnya memulainya
Bila Anda mendefinisikan maksud implisit dengan aksi dan/atau kategori tertentu, ada kemungkinan bahwa tidak akan ada aktivitas apa pun di perangkat yang bisa menangani permintaan Anda. Jika Anda hanya mengirim maksud dan tidak ada kecocokan, aplikasi akan mogok.
Untuk memverifikasi apakah aktivitas atau komponen lain tersedia untuk menerima maksud Anda, gunakan metode resolveActivity() bersama pengelola paket sistem seperti ini:
if (sendIntent.resolveActivity(getPackageManager()) != null) {
startActivity(chooser);
}
Jika hasil resolveActivity() bukan nol, maka setidaknya ada satu aplikasi yang tersedia yang bisa menangani maksud, dan aman untuk menggunakan startActivity(). Jangan mengirim maksud jika hasilnya nol.
Jika Anda memiliki fitur yang bergantung pada aktivitas eksternal yang mungkin atau mungkin tidak tersedia di perangkat, praktik terbaik adalah menguji ketersediaan aktivitas eksternal sebelum pengguna mencoba menggunakannya. Jika tidak ada aktivitas yang bisa menangani permintaan Anda (yakni, resolveActivity() mengembalikan nol), nonaktifkan fitur atau sediakan pesan kesalahan untuk fitur tersebut kepada pengguna.
Tampilkan pemilih aplikasi
Untuk menemukan aktivitas atau komponen lain yang bisa menangani permintaan maksud Anda, sistem Android akan mencocokkan maksud implisit dengan aktivitas yang filter maksudnya menunjukkannya bisa melakukan aksi tersebut. Jika beberapa aplikasi yang telah dipasang memang cocok, pengguna akan disajikan pemilih aplikasi yang memungkinkan mereka memilih aplikasi yang ingin digunakan untuk menangani maksud tersebut.
Dalam banyak kasus, pengguna memiliki aplikasi pilihan untuk tugas yang diberikan, dan mereka akan memilih opsi untuk selalu menggunakan aplikasi itu bagi tugas tersebut. Akan tetapi, jika beberapa aplikasi bisa merespons maksud dan pengguna setiap kali mungkin ingin menggunakan aplikasi yang berbeda, Anda bisa memilih untuk secara eksplisit menampilkan dialog pemilih kapan saja. Misalnya, bila aplikasi melakukan aksi "bagikan ini" bersama aksi ACTION_SEND, pengguna mungkin ingin berbagi menggunakan aplikasi yang berbeda, bergantung pada situasi saat ini.
Untuk menampilkan pemilih, buat maksud wrapper untuk maksud implisit dengan metode createChooser(), kemudian cocokkan dan gunakan startActivity() dengan maksud wrapper. Metode createChooser() juga memerlukan argumen string untuk judul yang muncul pada pemilih. Anda bisa menetapkan judul bersama sumber daya string seperti yang dilakukan pada string lain.
Misalnya:
// The implicit Intent object
Intent sendIntent = new Intent(Intent.ACTION_SEND);
// Always use string resources for UI text.
String title = getResources().getString(R.string.chooser_title);
// Create the wrapper intent to show the chooser dialog.
Intent chooser = Intent.createChooser(sendIntent, title);
// Resolve the intent before starting the activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
startActivity(chooser);
}
Menerima maksud implisit
Jika ingin aktivitas di aplikasi merespons maksud implisit (dari aplikasi milik Anda atau aplikasi lain), deklarasikan satu atau beberapa filter maksud di manifes Android. Setiap filter maksud menetapkan tipe maksud yang diterimanya berdasarkan aksi, data, dan kategori maksud. Sistem akan mengirimkan maksud implisit ke komponen aplikasi Anda hanya jika maksud itu bisa melewati salah satu filter maksud.
Setelah aktivitas berhasil diluncurkan bersama maksud implisit, Anda bisa menangani maksud tersebut dan datanya dengan cara sama yang dilakukan pada maksud eksplisit:
- Mendapatkan objek Intent dengan getIntent().
- Mendapatkan data maksud atau ekstra dari maksud itu.
- Melakukan tugas yang diminta maksud.
- Mengembalikan data ke aktivitas pemanggil bersama maksud lain, jika diperlukan.
Filter maksud
Definisikan filter maksud dengan satu atau beberapa elemen <intent-filter>
di file manifes aplikasi, yang disarangkan di elemen <activity>
yang sesuai. Di dalam <intent-filter>
, tetapkan tipe maksud yang bisa ditangani aktivitas Anda. Sistem Android mencocokkan maksud implisit dengan aktivitas atau komponen aplikasi lain hanya jika bidang-bidang dalam objek Intent cocok dengan filter maksud untuk komponen itu.
Filter maksud dapat berisi elemen ini, sesuai dengan bidang di objek Intent yang dijelaskan di atas:
<action>
: Aksi maksud.<data>
: Tipe data yang diterima, termasuk tipe MIME atau atribut URI data atribut lainnya (seperti skema, host, porta, jalur, dan sebagainya).<category>
: Kategori maksud.
Misalnya, aktivitas utama untuk aplikasi Anda menyertakan elemen <intent-filter>
ini, yang telah Anda lihat di bab sebelumnya:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Filter maksud ini memiliki aksi MAIN dan kategori LAUNCHER. Elemen <action>
menetapkan bahwa ini adalah titik masuk "utama" ke aplikasi. Elemen <category>
menetapkan bahwa aktivitas ini harus dicantumkan dalam peluncur aplikasi sistem (untuk memungkinkan pengguna meluncurkan aktivitas ini). Hanya aktivitas utama untuk aplikasi Anda yang harus memiliki filter maksud ini.
Inilah contoh lain maksud implisit untuk berbagi sedikit teks. Filter maksud ini mencocokkan contoh maksud implisit dari bagian sebelumnya:
<activity android:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
Anda bisa menetapkan lebih dari satu aksi, data, atau kategori untuk filter maksud yang sama, atau memiliki beberapa filter maksud per aktivitas untuk menangani jenis maksud yang berbeda.
Sistem Android akan menguji maksud implisit terhadap filter maksud dengan membandingkan bagian maksud tersebut dengan ketiga elemen filter maksud (aksi, kategori, dan data). Maksud harus lulus ketiga pengujian atau sistem Android tidak akan mengirim maksud ke komponen. Akan tetapi, karena sebuah komponen mungkin memiliki beberapa filter maksud, maksud yang tidak lulus salah satu filter komponen mungkin saja lulus di filter lainnya.
Tindakan
Filter maksud bisa mendeklarasikan nol atau beberapa elemen <action>
untuk aksi maksud. Aksi didefinisikan dalam atribut nama, dan berisi string "android.intent.action." ditambah nama aksi maksud, tanpa awalan ACTION_. Jadi, misalnya, maksud implisit dengan aksi ACTION_VIEW cocok dengan filter maksud yang aksinya adalah android.intent.action.VIEW.
Misalnya, filter maksud ini cocok dengan ACTION_EDIT dan ACTION_VIEW:
<intent-filter>
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.VIEW" />
...
</intent-filter>
Untuk melewati filter ini, aksi yang ditetapkan dalam objek Intent yang masuk harus cocok dengan setidaknya salah satu tindakan. Anda harus menyertakan setidaknya satu aksi maksud untuk mencocokkan maksud implisit yang masuk.
Kategori
Filter maksud bisa mendeklarasikan nol atau beberapa elemen <category>
untuk kategori maksud. Kategori didefinisikan dalam atribut nama, dan berisi string "android.intent.category." ditambah nama kategori maksud, tanpa awalan CATEGORY.
Misalnya, filter maksud ini cocok dengan CATEGORY_DEFAULT dan CATEGORY_BROWSABLE:
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
...
</intent-filter>
Perhatikan, semua aktivitas yang Anda inginkan untuk menerima maksud implisit harus menyertakan filter maksud android.intent.category.DEFAULT. Kategori ini diterapkan ke semua objek Intent implisit oleh sistem Android.
Data
Filter maksud bisa mendeklarasikan nol atau beberapa elemen <data>
untuk URI yang dimuat dalam data maksud. Karena data maksud terdiri dari URI dan (opsional) tipe MIME, Anda bisa membuat filter maksud untuk beragam aspek data itu, termasuk:
- Skema URI
- Host URI
- Jalur URI
- Tipe MIME
Misalnya, filter maksud ini mencocokkan maksud data dengan skema URI http dan tipe MIME "video/mpeg" atau "audio/mpeg".
<intent-filter>
<data android:mimeType="video/mpeg" android:scheme="http" />
<data android:mimeType="audio/mpeg" android:scheme="http" />
...
</intent-filter>
Berbagi data dengan ShareCompat.IntentBuilder
Tindakan berbagi adalah cara mudah bagi pengguna untuk berbagi item di aplikasi dengan jaringan sosial dan aplikasi lainnya. Meskipun Anda bisa membangun aksi berbagi di aplikasi sendiri menggunakan maksud implisit dengan aksi ACTION_SEND, Android menyediakan kelas helper ShareCompat.IntentBuilder agar mudah mengimplementasikan berbagi di aplikasi.
Dengan kelas ShareCompat.IntentBuilder, Anda tidak perlu membuat atau mengirim maksud implisit untuk aksi berbagi. Gunakan metode di ShareCompat.IntentBuilder untuk menunjukkan data yang ingin dibagikan serta informasi tambahan. Mulai dengan metode from() untuk membuat builder maksud baru, tambahkan metode lain untuk menambahkan lebih banyak data, dan akhiri dengan metode startChooser() untuk membuat dan mengirim maksud. Anda bisa merangkai metode seperti ini:
ShareCompat.IntentBuilder
.from(this) // information about the calling activity
.setType(mimeType) // mime type for the data
.setChooserTitle("Share this text with: ") //title for the app chooser
.setText(txt) // intent data
.startChooser(); // send the intent
Mengelola tugas dan aktivitas
Di bab sebelumnya, Anda telah mempelajari tentang tugas dan back-stack, yakni tempat tugas untuk aplikasi yang berisi tumpukannya sendiri bagi aktivitas yang telah dikunjungi pengguna saat menggunakan aplikasi Anda. Saat pengguna menyusuri aplikasi, instance aktivitas tugas itu akan didorong dan dimunculkan dari tumpukan untuk tugas itu.
Umumnya navigasi pengguna dari aktivitas ke aktivitas dan kembali lagi melalui tumpukan secara langsung. Bergantung pada desain dan navigasi aplikasi Anda, mungkin ada komplikasi, khususnya dengan aktivitas yang dimulai dari aplikasi lain dan tugas lain.
Misalnya, katakanlah Anda memiliki aplikasi dengan tiga aktivitas: A, B, dan C. A meluncurkan B bersama sebuah maksud, dan B meluncurkan C. C, sebaliknya mengirimkan maksud untuk meluncurkan A. Dalam hal ini, sistem membuat instance kedua dari A di bagian atas tumpukan, dibandingkan memberikan instance yang sudah berjalan ke latar depan. Bergantung pada cara mengimplementasikan aktivitas, dua instance dari A bisa menjadi tidak sinkron dan memberikan pengalaman membingungkan pada pengguna saat menyusuri kembali melalui tumpukan.
Atau, katakanlah aktivitas C Anda bisa diluncurkan dari aplikasi kedua bersama sebuah maksud implisit. Pengguna menjalankan aplikasi kedua, yang memiliki tugas dan back-stack sendiri. Jika aplikasi itu menggunakan maksud implisit untuk meluncurkan aktivitas C Anda, instance C akan baru dibuat dan ditempatkan pada back-stack untuk tugas aplikasi kedua itu. Aplikasi Anda tetap memiliki tugas, back-stack, dan instance C sendiri.
Kebanyakan perilaku default Android untuk tugas dan aktivitas berfungsi dengan baik dan Anda tidak perlu khawatir tentang cara aktivitas dikaitkan dengan tugas atau bagaimana aktivitas bisa ada di back-stack. Jika Anda ingin mengubah perilaku normal, Android menyediakan sejumlah cara untuk mengelola tugas dan aktivitas dalam tugas tersebut, termasuk:
- Mode peluncuran aktivitas, untuk menentukan cara meluncurkan aplikasi.
- Afinitas tugas, yang menunjukkan tugas mana yang memiliki aktivitas yang diluncurkan.
Mode Peluncuran Aktivitas
Gunakan mode peluncuran aktivitas untuk menunjukkan cara memperlakukan aktivitas baru bila diluncurkan—yakni jika aktivitas harus ditambahkan ke tugas saat ini, atau diluncurkan ke dalam tugas baru. Definisikan mode peluncuran untuk aktivitas bersama atribut di elemen <activity>
manifes Android, atau bersama flag yang disetel pada maksud yang memulai aktivitas itu.
Atribut aktivitas
Untuk mendefinisikan mode peluncuran aktivitas, tambahkan atribut android:launchMode ke elemen <activity>
di manifes Android. Contoh ini menggunakan mode peluncuran "standar", yang merupakan default.
<activity
android:name=".SecondActivity"
android:label="@string/activity2_name"
android:parentActivityName=".MainActivity"
android:launchMode="standard">
...
</activity>
Ada empat mode peluncuran yang tersedia sebagai bagian dari elemen <activity>
:
- "standard" (default): Aktivitas baru diluncurkan dan ditambahkan ke back-stack untuk tugas saat ini. Aktivitas bisa dibuat instance-nya beberapa kali, tugas tunggal bisa memiliki beberapa instance aktivitas yang sama, dan beberapa instance bisa dimiliki oleh tugas yang berbeda.
- "singleTop": Jika instance aktivitas ada di bagian atas back-stack tugas saat ini dan permintaan maksud untuk aktivitas tersebut datang, Android akan merutekan maksud tersebut ke instance aktivitas yang ada, bukan membuat instance baru. Aktivitas baru tetap dibuat instance-nya jika masih ada aktivitas di back-stack selain di bagian atas.
- "singleTask": Bila aktivitas diluncurkan, sistem akan membuat tugas baru untuk aktivitas itu. Jika tugas lain sudah ada dengan instance aktivitas itu, sistem akan merutekan maksud ke aktivitas itu sebagai gantinya.
- "singleInstance": Sama seperti tugas tunggal, hanya saja sistem tidak meluncurkan aktivitas lain ke dalam tugas yang berisi instance aktivitas. Aktivitas akan selalu tunggal dan satu-satunya anggota tugasnya.
Sebagian besar aplikasi hanya akan menggunakan mode peluncuran standar atau singleTop. Lihat dokumentasi atribut launchMode untuk informasi lebih detail tentang mode peluncuran.
Flag maksud
Flag maksud merupakan opsi yang menetapkan cara aktivitas (atau komponen aplikasi lainnya) yang menerima maksud harus menangani maksud tersebut. Flag maksud didefinisikan sebagai konstanta di kelas Intent dan dimulai dengan kata FLAG_. Anda menambahkan flag maksud ke objek Intent dengan setFlag() atau addFlag().
Tiga flag maksud spesifik digunakan untuk mengontrol mode peluncuran aktivitas, baik yang berhubungan dengan atribut launchMode atau yang menggantikannya. Flag maksud selalu diutamakan daripada mode peluncuran jika terjadi konflik.
- FLAG_ACTIVITY_NEW_TASK: memulai aktivitas di tugas baru. Ini adalah perilaku yang sama dengan mode peluncuran singleTask.
- FLAG_ACTIVITY_SINGLE_TOP: jika aktivitas yang diluncurkan berada di bagian atas back-stack, rutekan maksud ke instance aktivitas yang ada tersebut. Jika tidak, buat instance aktivitas baru. Ini adalah perilaku yang sama dengan mode peluncuran singleTop.
- FLAG_ACTIVITY_CLEAR_TOP: Jika instance aktivitas yang akan diluncurkan sudah ada di back-stack, musnahkan aktivitas lain di atasnya dan rutekan maksud ke instance yang ada. Bila digunakan bersama-sama dengan FLAG_ACTIVITY_NEW_TASK, flag ini berada di instance aktivitas yang ada dalam tugas apa pun dan membawanya ke latar depan.
Lihat kelas Intent untuk informasi selengkapnya tentang flag maksud yang tersedia.
Tangani maksud baru
Bila sistem Android merutekan maksud ke instance aktivitas yang ada, sistem akan memanggil metode callback onNewIntent() (biasanya persis sebelum metode onResume()). Metode onNewIntent() menyertakan argumen untuk maksud baru yang dirutekan ke aktivitas. Ganti metode onNewIntent() dalam kelas Anda untuk menangani informasi dari maksud baru tersebut.
Perhatikan, metode getIntent()—untuk mendapatkan akses ke maksud yag meluncurkan aktivitas—selalu mempertahankan maksud asal yang meluncurkan instance aktivitas. Panggil setIntent() dalam metode onNewIntent():
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// Use the new intent, not the original one
setIntent(intent);
}
Panggilan ke getIntent() setelah ini akan mengembalikan maksud baru.
Afinitas Tugas
Afinitas tugas menunjukkan tugas yang sebaiknya memiliki aktivitas pilihan bila instance aktivitas itu diluncurkan. Secara default, semua aktivitas dimiliki aplikasi yang meluncurkannya. Aktivitas dari luar aplikasi yang diluncurkan bersama maksud implisit dimiliki aplikasi yang mengirim maksud implisit.
Untuk mendefinisikan afinitas tugas, tambahkan atribut android:taskAffinity ke elemen <activity>
di manifes Android. Afinitas tugas default adalah nama paket untuk aplikasi (yang dideklarasikan di
<activity
android:name=".SecondActivity"
android:label="@string/activity2_name"
android:parentActivityName=".MainActivity"
android:taskAffinity="com.example.android.myapp.newtask">
...
</activity>
Afinitas tugas biasanya digunakan bersama-sama dengan mode peluncuran singleTask atau flag maksud FLAG_ACTIVITY_NEW_TASK untuk menempatkan aktivitas baru dalam tugas yang diberi nama sendiri. Jika tugas baru sudah ada, maksud akan dirutekan ke tugas dan afinitas itu.
Penggunaan afinitas tugas lainnya adalah pengindukan ulang, yang memungkinkan tugas dipindahkan dari aktivitas yang semula meluncurkannya ke aktivitas yang menjadi afinitasnya. Untuk mengaktifkan pengindukan ulang atas tugas, tambahkan atribut afinitas tugas ke elemen <activity>
dan setel android:allowTaskReparenting ke true.
<activity
android:name=".SecondActivity"
android:label="@string/activity2_name"
android:parentActivityName=".MainActivity"
android:taskAffinity="com.example.android.myapp.newtask"
android:allowTaskReparenting="true" >
...
</activity>
Praktik Terkait
Latihan terkait dan dokumentasi praktik ada di Dasar-Dasar Developer Android: Praktik.
Ketahui Selengkapnya
- Aktivitas (Panduan API)
- Aktivitas (Referensi API)
- Maksud dan Filter Maksud
- Maksud (Referensi API)
<intent-filter>
- Mengizinkan Aplikasi Lain untuk Memulai Aktivitas Anda
- ShareCompat.IntentBuilder (Referensi API)
- Uri (Referensi API)
- Maksud Google Maps
- Tugas dan Back-Stack
<activity>
- Memanipulasi tugas dan back-stack Android
- Penjelasan afinitas tugas Android
- Memahami launchMode Aktivitas Android